#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int Data_type;
// 顺序栈结构体
typedef struct stack
{
    Data_type data[MAXSIZE];
    int top;
} stack;

// 顺序栈创建
stack *stack_create()
{
    stack *s = (stack *)malloc(sizeof(stack));
    if (s == NULL)
    {
        printf("内存分配失败\n");
    }
    memset(s, 0, sizeof(stack));
    s->top = -1;
    return s;
}
// 判空
int stack_empty(stack *s)
{
    if (s == NULL)
    {
        return -1;
    }
    if (s->top == -1)
    {
        printf("已满");
        return 1;
    }
    return 0;
}
// 判满
int stack_full(stack *s)
{
    if (s == NULL)
    {
        return -1;
    }
    if (s->top == MAXSIZE - 1)
    {
        printf("已满");
        return 1;
    }
    return 0;
}
// 销毁
stack *stack_destory(stack *s)
{
    if (s == NULL)
    {
        return NULL;
    }
    free(s);
    s = NULL;
    return s;
}
// 入栈
int stack_insert(stack *s, Data_type value)
{
    if (s == NULL)
    {
        return -1;
    }
    if (s->top == MAXSIZE - 1)
    {
        printf("已满");
        return -1;
    }
    s->top++;
    s->data[s->top] = value;
    return 0;
}
// 改
int stack_change(stack *s, int pos, Data_type value)
{
    if (s == NULL)
    {
        return -1;
    }
    if (s->top >= pos)
    {
        s->data[pos] = value;
    }
    return 0;
}
// 查
int stack_get(stack *s, int pos)
{
    if (s->top >= pos)
    {
        printf("%d\n", s->data[pos]);
        return s->data[pos];
    }
    else
    {
        return -1;
    }
}
// 打印
void stack_printf(stack *s)
{
    if(s==NULL){
        return;
    }
    if (s->top > 0)
    {
        for (int i = 0; i <= s->top; i++)
        {
            printf("%d\t", s->data[i]);
        }
    }
    printf("\n");
}
void main()
{
    stack *s = stack_create();
    stack_insert(s, 1);
    stack_insert(s, 2);
    stack_insert(s, 3);
    stack_change(s, 2, 666);
    stack_printf(s);
    stack_get(s, 2);
    stack_destory(s);
    stack_printf(s);
}